package offer.day30;

import java.util.HashMap;
import java.util.Map;

public class No50GetFirstNotRepeatingChar_InStream {
    /*面试题50：第一次只出现一次的字符
     * 题目二：字符流中第一个只出现一次的字符
     * 请事先一个函数，用来找出字符流中第一个只出现一次的字符。
     * 例如：当从字符流中独处耆那两个字符“go”时，第一次只出现一次的字符是‘g’；
     * 当从该字符流中独处前6个字符“google”时，第一个只出现一次的字符是‘l’
     *
     * 思路：与上一个思路一致
     * 但是使用的容器要有键值配对的存储结构
     * 若无出现一次的字符则返回#
     *
     *
     * */
    public static void main(String[] args) {
        No50GetFirstNotRepeatingChar_InStream h = new No50GetFirstNotRepeatingChar_InStream();
        String s = "abbaccdeff";
        System.out.println("字符流中第一个只出现一次的字符是："+h.FirstAppearanceOnce(s));
    }

    private String FirstAppearanceOnce(String s) {
        if(s==null||s.length()==0) return null;
        Map<Character,Integer> map=new HashMap<>();
        char[] ch=s.toCharArray();
        for(char c:ch){
            if(map.containsKey(c)){
                map.put(c,map.get(c)+1);
            }else{
                map.put(c,1);
            }
        }
        for(Character key:map.keySet()){
            if(map.get(key)==1){
                return String.valueOf(key);
            }
        }
        return null;

    }
}
